/**
* Retourne la distance en mètres entre 2 points GPS avec une erreur maximale de 0.2%
*/
long Geometry::dist(float latitudedep, float longitudedep, float latitudear, float longitudear)
{
 float latitude;
 float longitude;
 float a;
 float c;
 float d;
 float e;
 long distance;
 latitude= (abs(latitudedep-latitudear));
 longitude= min(min(abs(longitudedep-longitudear), abs((2*pi+longitudedep)-longitudear)), abs(longitudedep-(longitudear+2*pi)));
 a = (square(sin(latitude/2.0))) + cos(latitudedep)*cos(latitudear)*(square(sin(longitude/2.0)));
 d=sqrt(a);
 e=sqrt(1-a);
 c = 2*atan2(d, e);
 distance= rmoyterre*c;
 return distance;
}

/**
* Returns the normalized directional vector between 2 GPS point
*/
float* Geometry::normDiffVect(float latitudedep, float longitudedep, float latitudear, float longitudear)
{
 float* res;
 float heading;
 float a;
 float b;
 float c;
 float d;
 float longitude;
 longitude=min(min(abs(longitudedep-longitudear), abs((2*pi+longitudedep)-longitudear)), abs(longitudedep-(longitudear+2*pi)));
 a=sin(longitude)*cos(latitudear);
 c=cos(latitudedep)*sin(latitudear);
 d=sin(latitudedep)*cos(latitudear)*cos(longitude);
 b=c-d;
 heading=atan2(a,b);
 if (sin(longitudear-longitudedep)>0){                    //passage de [-180°; 180°] à [0°; 360°] pour rejoindre la convention des caps d'un compas.
  heading=2*pi-abs(heading); 
 }
 res[0]=cos(heading);
 res[1]=sin(heading);
 return res;
}
